package com.example.mqttdemo.mqtt;

import com.example.mqttdemo.Utils;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.stereotype.Component;
//订阅者类 收到订阅信息回回调，调用pushCall打印收到的信息
/**
 * @Author:Dong
 * @Date：2020/7/31 9:59
 */
@Slf4j
@Component
public class MqttSubClient {

    public MqttSubClient(MqttPushClient mqttPushClient){
        subScribeDataPublishTopic();
    }


    private void subScribeDataPublishTopic(){
        //这是之前错的
        //订阅test_queue主题
        //订阅的的主题 一个服务器上有多个用户 使用同一个主题的用户才能通信 可以多个用户同时使用一个主题，两个发布一个订阅
        //我的服务器上没有test_queue这个主题 我的nisa 和felix的读写权利是在bai_topic上的


        //这是现在对的
        //        #MQTT-用户名,!!!我的服务器是允许匿名访问的 随便输就行 服务器上面没有创建对象 也没有给对象赋write read权 根本就没创建对象 而且订阅的主题是什么都行
//#之前要在aclfile文件中设置订阅的主题 然后给创建的用户赋权write read 没订阅一个都要配置订阅文件 而且还没有回复
//#现在不用管aclfile文件了 就是随便订阅名都行 不用在conf中改了 但是要保持订阅者的订阅名要和发布者的一直 不然怎么对应

        //访问这个http://localhost:8080/mqttDemo/testPublishMessage1路由 发布者发布信息
        Utils.statu="Fresh Get Nothing";//每次重新订阅的时候都要设置本地参数为初始值 不然会记得上一次的值
        subscribe("bai_topic_two");
        //订阅之后会自动调用回调函数 显示订阅的内容
       System.out.println("222222");
    }

    /**
     * 订阅某个主题，qos默认为0
     *
     * @param topic
     */
    public void subscribe(String topic) {

        subscribe(topic, 0);
    }

    /**
     * 订阅某个主题
     *
     * @param topic 主题名
     * @param qos
     */
    public void subscribe(String topic, int qos) {
        try {
            MqttClient client = MqttPushClient.getClient();
            if (client == null) return;
            client.subscribe(topic, qos);
            log.info("订阅主题:{}",topic);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

}
